@强制输出
@输出名("短视频解析")
类 短视频解析 : 窗口

	@布局配置([[根布局=真,宽度=-1,高度=-1,纵向布局=真,背景颜色=-1576716]])
	变量 线性布局1 : 线性布局
	@布局配置([[父布局=线性布局1,宽度=-1,高度DP=45,左内边距DP=18,右内边距DP=18,@上外边距DP=10]])
	变量 相对布局1 : 相对布局
	@布局配置([[父布局=相对布局1,对齐方式=16,内容="解析",粗体=真,字体大小=20,字体颜色=-16777216,高度=-1,ID=1]])
	变量 文本框1 : 文本框
	@布局配置([[父布局=相对布局1,高度=-1,内容="短视频",对齐方式=16,@位于某组件右边=1,@左外边距DP=1,纵向偏移DP=2,字体大小=16,粗体=真]])
	变量 文本框2 : 文本框
	@布局配置([[父布局=相对布局1,高度=-1,@位于布局右边=真,对齐方式=17]])
	变量 线性布局2 : 线性布局
	@布局配置([[父布局=线性布局2,图片资源="../../../素材/Png/3916718.png",宽度DP=21,高度DP=21]])
	变量 图片框1 : 图片框
	@布局配置([[父布局=线性布局1,宽度=-1,高度DP=4,对齐方式=17,右内边距DP=20,左内边距DP=20,上内边距DP=1,下内边距DP=1]])
	变量 线性布局9 : 线性布局
	@布局配置([[父布局=线性布局9,宽度=-1,高度=-1]])
	变量 MAT进度条1 : MAT进度条
	@布局配置([[父布局=线性布局1,宽度=-1,高度=-2,对齐方式=1,纵向布局=真,左内边距DP=20,右内边距DP=20,上内边距DP=10]])
	变量 线性布局3 : 线性布局
	@布局配置([[父布局=线性布局3,宽度=-1,高度DP=40,圆角=75,卡片阴影=0,@下外边距DP=15]])
	变量 卡片布局1 : 卡片布局
	@布局配置([[父布局=卡片布局1,宽度=-1,高度=-1,透明度=1.0,背景颜色=-328966]])
	变量 线性布局4 : 相对布局
	@布局配置([[父布局=线性布局4,宽度=-1,高度=-1,左内边距DP=15,右内边距DP=3,上内边距DP=2,下内边距DP=2,@位于某组件左边=1]])
	变量 线性布局8 : 线性布局
	@布局配置([[父布局=线性布局8,宽度=-1,高度=-1,内边距=0,背景颜色=16777215,提示文本="",单行输入=真,对齐方式=16,字体颜色=-16777216,单行显示=真,字体大小=16,粗体=真,内容="",显示光标=真]])
	变量 输入内容 : 编辑框
	@布局配置([[父布局=线性布局4,宽度DP=60,高度=-1,ID=1,@位于布局左边=假,@位于布局右边=真]])
	变量 解析按钮 : 相对布局
	@布局配置([[父布局=解析按钮,圆角=75,卡片阴影=0,宽度=-1,横向偏移DP=-3,高度DP=35,@位于布局中间=真,@位于布局左边=假,@位于布局右边=真]])
	变量 卡片布局4 : 卡片布局
	@布局配置([[父布局=卡片布局4,宽度=-1,高度=-1,背景颜色=-11433996]])
	变量 线性布局7 : 线性布局
	@布局配置([[父布局=解析按钮,圆角=0,卡片阴影=0,高度DP=35,@位于布局中间=真,背景颜色=-11433996,@位于布局右边=假,宽度DP=25,@位于布局左边=真]])
	变量 卡片布局5 : 卡片布局
	@布局配置([[父布局=解析按钮,@位于布局中间=真,@位于布局右边=假,内容="解析",粗体=真,字体大小=17,@右外边距DP=5,字体颜色=-1,@位于布局左边=假,横向偏移DP=-2]])
	变量 文本框3 : 文本框
	@布局配置([[父布局=线性布局1,宽度=-1,高度=-1,左内边距DP=20,右内边距DP=20,对齐方式=17,下内边距DP=8]])
	变量 线性布局5 : 线性布局
	@布局配置([[父布局=线性布局5,宽度=-1,高度=-2,卡片阴影=0,圆角=24,可视=真,背景颜色=-1576716]])
	变量 播放器界面 : 卡片布局
	@布局配置([[父布局=播放器界面,宽度=-1,高度=-2,对齐方式=17,背景颜色=-1576716]])
	变量 线性布局6 : 线性布局
	@布局配置([[父布局=线性布局6,宽度=-1,高度=-2]])
	变量 视频播放器1 : 视频播放器


	变量 抖音去水印1:抖音去水印
	变量 快手去水印1:快手去水印
	变量 QQ去水印1:qq去水印

	变量 当前视频链接:文本
	变量 当前视频信息:文本=""
	变量 下载视频链接:文本
	变量 下载视频标题:文本
	变量 抖音图集集合:文本集合
	变量 下载路径=取存储卡路径() + "/"+全局配置.软件名称+"/短视频解析/"
	事件 短视频解析:创建完毕()
		订阅事件()
		本对象.屏幕方向 = 1
		本对象.显示标题栏 =假
		本对象.状态栏字体黑色 = 真
		本对象.状态栏颜色 = -1576716
		本对象.导航栏颜色 = -1576716
		code getWindow().setSoftInputMode(2);
		播放器界面.可视 = 假
		MAT进度条1.起始颜色 = "#FF9CD4FC"
		MAT进度条1.结束颜色 = "#FF9CD4FC"
		MAT进度条1.背景颜色 = "#FFF3F3F3"
		MAT进度条1.显示进度文本 = 假
		MAT进度条1.进度高度 = 4
		MAT进度条1.显示背景 = 真
		MAT进度条1.进度圆角 = 8
	结束 事件

	事件 解析按钮:被单击()
		如果 输入内容.内容==""则
			弹出提示("请输入视频链接")
		否则
			视频播放器1.停止播放()
			播放器界面.可视 = 假
			显示加载("正在解析")
			当前视频链接=输入内容.内容
			开始解析()
		结束 如果

	结束 事件

	方法 开始解析()
		//这个表达式也可以 "http[s]?:\\/\\/[\\w.-]+[\\w\\/-]*[\\w.-]*\\??[\\w=&:\\-\\+\\%]*[/]"
		变量 表达式 = "http[s]?:\\/\\/[\\w.]+[\\w]*\\S+"
		变量 正则后链接:文本 = 正则表达式.正则匹配(当前视频链接,表达式)[0]
		如果 正则后链接 ? "douyin" 则
			抖音去水印1.抖音解析1(正则后链接)
		否则 正则后链接 ? "kuaishou"
			快手去水印1.快手解析(正则后链接)
		否则 正则后链接 ? "qq.com"
			QQ去水印1.解析1(正则后链接)
		否则
			弹出提示("请输入正确的链接")
		结束 如果
	结束 方法
	事件 抖音去水印1:抖音解析数据(标题 : 文本,作者 : 文本,标题头像 : 文本,音乐标题 : 文本,音乐作者名称 : 文本,音乐作者头像 : 文本,视频链接 : 文本)
		如果 标题==""则
			下载视频标题=作者+".mp4"
		否则
			下载视频标题=标题+".mp4"
		结束 如果
		如果 视频链接.开头为("h")==真 则
			关闭加载()
			播放器界面.可视 = 真
			下载视频链接=视频链接
			提交到新线程运行()
			视频播放器1.置播放路径(下载视频链接,真)
			视频播放器1.开始播放()
			结束提交到新线程()
		结束 如果
	结束 事件

	事件 抖音去水印1:抖音解析结果(结果1 : 文本)
		当前视频信息=结果1
	结束 事件

	事件 图片框1:被单击()
		变量 提示:DX基础对话框
		提示.样式(DX样式.IOS)
		提示.标题("系统提示")
		提示.内容("点击视频即可下载，目前仅支持抖音")
		提示.按钮1("确定")
		提示.显示()

	结束 事件

	事件 图片框1:被长按()
		如果 当前视频信息 !="" 则
			置剪切板文本(本对象,当前视频信息)
			弹出提示("视频详情已复制")
		结束 如果
	结束 事件

	事件 视频播放器1:被单击()
		变量 下载提示:DX基础对话框
		下载提示.样式(DX样式.IOS)
		下载提示.标题("系统提示")
		下载提示.内容("你需要?")
		下载提示.按钮1("下载视频")
		下载提示.按钮2("取消")
		下载提示.显示()
		事件 下载提示:按钮1被单击() : 逻辑型
			下载提示.关闭()
			变量 等待框2 : DX加载
			变量 网络工具3:网络工具
			等待框2.内容("正在下载")
			等待框2.显示()
			网络工具3.下载(下载视频链接,下载路径+下载视频标题)
			事件 网络工具3:正在下载(进度 : 小数)
				等待框2.进度(进度/100)
			结束 事件
			事件 网络工具3:下载结束(cookie : 文本)
				提交到新线程运行()
				等待框2.类型(DX加载.类型_成功)
				等待框2.内容("下载成功")
				延时(1800)
				等待框2.关闭()
				结束提交到新线程()
			结束 事件
			返回 假
		结束 事件

	结束 事件

	//视频播放完成时触发该事件
	事件 视频播放器1:视频播放完成()
		视频播放器1.重新播放()
	结束 事件



	@虚拟方法
	方法 返回键被按下()
		如果 输入内容.内容==""则
			视频播放器1.停止播放()
			父对象.返回键被按下()
		否则
			输入内容.内容=""
		结束 如果
	结束 方法

结束 类